package br.com.xp.galera.perfil.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.transaction.annotation.Transactional;

import br.com.xp.galera.domain.Comunidade;
import br.com.xp.galera.domain.Usuario;

@Transactional
public class PerfilDaoImpl extends HibernateDaoSupport implements PerfilDao {

	public Usuario findById(Long id) {
		Usuario usuario = null;
		Session session = getSession(false);

		try {
			usuario = (Usuario) session.get(Usuario.class, id);
		} catch (HibernateException ex) {
			throw convertHibernateAccessException(ex);
		}

		return usuario;

	}

	public List<Usuario> findAmigos(Long id) {

		List<Usuario> list = new ArrayList<Usuario>();
		Session session = getSession(false);

		try {

			Query query = session
					.createQuery("select amigos from Usuario u where u.id= :id order by u.ultimoLogin");
			query.setLong("id", id);
			list = query.list();
		} catch (HibernateException ex) {
			throw convertHibernateAccessException(ex);
		}
		return list;
	}

	public List<Comunidade> listarComunidades(Long id) {

		List<Comunidade> list = new ArrayList<Comunidade>();
		Session session = getSession(false);

		try {

			Query query = session
					.createQuery("select comunidades from Usuario u where u.id = :id");
			query.setLong("id", id);
			list = query.list();
		} catch (HibernateException ex) {
			throw convertHibernateAccessException(ex);
		}
		return list;
	}

	
}
